import moment from 'moment'; import Button from '@mui/material/Button'; import Box from '@mui/material/Box'; import Link from '@mui/material/Link'; import Paper from '@mui/material/Paper'; import Container from '@mui/material/Container'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import {useTheme} from '@mui/material/styles'; import {DatePicker} from '@mui/x-date-pickers/DatePicker'; import {PropsWithChildren, useState} from 'react'; import {useTranslation} from 'react-i18next'; import pageUtils from '../../../lib/pageUtils'; import ShareEvent from '../../../containers/ShareEvent'; import useEventStore from '../../../stores/useEventStore'; import useToastStore from '../../../stores/useToastStore'; import useSettings from '../../../hooks/useSettings'; import EventLayout, {TabComponent} from '../../../layouts/Event'; import { EventByUuidDocument, useUpdateEventMutation, } from '../../../generated/graphql'; import SupportCaroster from '../../../containers/SupportCaroster'; interface Props { eventUUID: string; announcement?: string; } const Page = (props: PropsWithChildren) => { return ; }; const DetailsTab: TabComponent = ({}) => { const {t} = useTranslation(); const theme = useTheme(); const settings = useSettings(); const [updateEvent] = useUpdateEventMutation(); const addToast = useToastStore(s => s.addToast); const setEventUpdate = useEventStore(s => s.setEventUpdate); const event = useEventStore(s => s.event); const [isEditing, setIsEditing] = useState(false); const idPrefix = isEditing ? 'EditEvent' : 'Event'; const onSave = async e => { try { const {uuid, ...data} = event; const {id, travels, waitingPassengers, __typename, ...input} = data; await updateEvent({ variables: {uuid, eventUpdate: input}, refetchQueries: ['eventByUUID'], }); setIsEditing(false); } catch (error) { console.error(error); addToast(t('event.errors.cant_update')); } }; const sectionSx = { marginBottom: theme.spacing(2), width: '540px', maxWidth: '100%', paddingX: theme.spacing(2), }; const modifyButton = isEditing ? ( ) : ( ); if (!event) return null; return ( {modifyButton} {t('event.fields.name')} {isEditing ? ( setEventUpdate({name: e.target.value})} name="name" id="EditEventName" /> ) : ( {event.name ?? t('event.fields.empty')} )} {t('event.fields.date')} {isEditing ? ( ( )} inputFormat="DD/MM/yyyy" value={event.date} onChange={date => setEventUpdate({ date: !date ? null : moment(date).format('YYYY-MM-DD'), }) } /> ) : ( {event.date ? moment(event.date).format('DD/MM/YYYY') : t('event.fields.empty')} )} {t('event.fields.address')} {isEditing ? ( setEventUpdate({address: e.target.value})} id={`${idPrefix}Address`} name="address" /> ) : ( {event.address ? ( e.preventDefault} > {event.address} ) : ( t('event.fields.empty') )} )} {t('event.fields.description')} {isEditing ? ( setEventUpdate({description: e.target.value})} id={`${idPrefix}Description`} name="description" /> ) : ( {event.description ?? t('event.fields.empty')} )} {t('event.fields.link')} {t('event.fields.link_desc')} {' '} ); }; export const getServerSideProps = pageUtils.getServerSideProps( async (context, apolloClient) => { const {uuid} = context.query; const {host = ''} = context.req.headers; let event = null; // Fetch event try { const {data} = await apolloClient.query({ query: EventByUuidDocument, variables: {uuid}, }); event = data?.eventByUUID?.data; } catch (error) { return { notFound: true, }; } return { props: { eventUUID: uuid, metas: { title: event?.attributes?.name || '', url: `https://${host}${context.resolvedUrl}`, }, }, }; } ); export default Page;